﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace orit120132
{
    class Program
    {
        static string localD = @"Dicionario.xml";
        static string localT = @"Tesauro.xml";

        static Dicionario dicionario = new Dicionario(localD);
        static Tesauro tesauro = new Tesauro(localT);

        static void Main(string[] args)
        {
            string resposta = "1";
            Console.ForegroundColor = ConsoleColor.Black;
            Console.BackgroundColor = ConsoleColor.White;
            Console.Title = "Tesauru's Dicionário";

            while (resposta != "0")
            {
                Titulo();
                Console.WriteLine("[1] Dicionário");
                Console.WriteLine("[2] Tesauro");
                Console.WriteLine("[0] Sair\n");
                Console.Write("Por favor escolha uma opção \n>> ");

                resposta = Console.ReadLine();
                Console.Clear();
                switch (resposta)
                {
                    case "0":
                        break;
                    case "1":
                        menu_dicionario();
                        break;
                    case "2":
                        menu_tesauro();
                        break;
                    default:
                        Console.WriteLine("Digite um número válido");
                        break;
                }
            }
        }

        static void Titulo()
        {
            Console.Clear();
            Console.WriteLine("                            Tesauru's Dicionário\n");
        }

        static void menu_dicionario()
        {
            string resposta = "1";
            

            while (resposta != "0")
            {
                Titulo();
                Console.WriteLine("[1] Adicionar Palavra ao Dicionário");
                Console.WriteLine("[2] Remover Palavra do Dicionário");
                Console.WriteLine("[3] Consultar Palavra do Dicionário");
                Console.WriteLine("[0] Voltar ao Menu\n");
                Console.Write("Por favor escolha uma opção \n>> ");

                resposta = Console.ReadLine();
                switch (resposta)
                {
                    case "1":
                        adicionar_dicionario();
                        break;
                    case "2":
                        dicionario_remover();
                        break;
                    case "3":
                        dicionario_buscar();
                        break;
                    case "0":
                            dicionario.UparXML(localD);
                        break;
                    default:
                        Console.WriteLine("Digite um número válido");
                        break;
                }
            }

        }

        static void adicionar_dicionario()
        {
            string palavra;
            string[] significado = new string[5];
            
            Titulo();
            Console.Write("Digite a palavra que será adicionada ao dicionário \n>> ");
            palavra = Console.ReadLine();
            if (dicionario.Buscar(palavra) == null )
            {
                Console.Write("\nPor favor insira um significado para a palavra:\n>> ");
                int i = 0;
                significado[i] = Console.ReadLine();
                Console.Write("\nDeseja digitar mais um significado para a palavra?\n[0] Não\n[ENTER] Sim\nEscolha uma opção \n>> ");
                string resp = Console.ReadLine();
                while (resp != "0" && i < 4)
                {
                    Titulo();
                    i++;
                    Console.Write("\nPor favor insira um significado para a palavra:\n>> ");
                    significado[i] = Console.ReadLine();
                    Console.Write("\nDeseja digitar mais um significado para a palavra?\n[0] Não\n[ENTER] Sim\nEscolha uma opção \n>> ");
                    resp = Console.ReadLine();
                }
                dicionario.Inserir(palavra, significado, i + 1);

                Console.WriteLine("\nPalavra adicionada com sucesso!");
                Console.Read();
            }
            else
            {
                Console.WriteLine("\nEssa palavra já consta no dicionário!");
                Console.Read();
            }
        }

        static void dicionario_buscar()
        {
            string palavra;
            TermoDicionario t;
            Titulo();
            Console.Write("Digite a palavra que deseja consultar \n>> ");
            palavra = Console.ReadLine();
            t = (TermoDicionario)dicionario.Buscar(palavra);
            Console.Clear();
            if (t != null)
            {
                string[] significados = t.Significado;
                Console.WriteLine(palavra + ":\n");
                for (int i = 0; i < 5; i++)
                {
                    if(significados[i] != "" && significados[i] != null)
                        Console.WriteLine("({0}) " + significados[i], i + 1);
                }
            }
            else
                Console.WriteLine("\nEssa palavra não consta no dicionário!");
            Console.ReadLine();
        }

        static void dicionario_remover()
        {
            string palavra;
            Console.Write("Digite a palavra que deseja remover do dicionário \n>> ");
            palavra = Console.ReadLine();
            if (dicionario.Remover(palavra))
                Console.WriteLine("\nPalavra removida com sucesso!");
            else
                Console.WriteLine("\nEssa palavra não consta no dicionário!");
            Console.ReadLine();
        }

        static void menu_tesauro()
        {
            string resposta = "1";
            while (resposta != "0")
            {
                Titulo();
                Console.WriteLine("[1] Adicionar Palavra ao Tesauro");
                Console.WriteLine("[2] Remover Palavra do Tesauro");
                Console.WriteLine("[3] Consultar Palavra do Tesauro");
                Console.WriteLine("[0] Voltar ao Menu\n");

                Console.Write("Por favor escolha uma opção \n>> ");
                resposta = Console.ReadLine();
                Console.Clear();
                switch (resposta)
                {
                    case "1":
                        adicionar_tesauro();
                        break;
                    case "2":
                        tesauro_remover();
                        break;
                    case "3":
                        tesauro_buscar();
                        break;
                    case "0":
                        tesauro.UparXML(localT);
                        break;
                    default:
                        Console.WriteLine("\nDigite um número válido");
                        break;
                }
            }
        }

        static void adicionar_tesauro()
        {
            string palavra;
            string[] restante = new string[3];
            string resposta;
            Titulo();
            Console.Write("Digite a palavra que será adicionada ao tesauro \n>> ");
            palavra = Console.ReadLine();
            if (tesauro.Buscar(palavra) == null)
            {
                Console.Write("\nAdicione sinônimos para essa palavra (0 para não adicionar) \n>> ");
                resposta = Console.ReadLine();
                if (resposta != "0")
                    restante[0] = resposta;
                else
                    restante[0] = "N/A";
                Console.Write("\nAdicione termos contrastantes para essa palavra (0 para não adicionar) \n>> ");
                resposta = Console.ReadLine();
                if (resposta != "0")
                    restante[1] = resposta;
                else
                    restante[1] = "N/A";
                Console.Write("\nAdicione termos relacionados a essa palavra (0 para não adicionar) \n>> ");
                resposta = Console.ReadLine();
                if (resposta != "0")
                    restante[2] = resposta;
                else
                    restante[2] = "N/A";
                tesauro.Inserir(palavra, restante);
            }
            else
            {
                Console.WriteLine("\nEssa palavra já consta no tesauro!");
                Console.Read();
            }
            Console.Clear();
        }

        static void tesauro_remover()
        {
            string palavra;
            Titulo();
            Console.Write("Digite a palavra que deseja remover do tesauro \n>> ");
            palavra = Console.ReadLine();
            if (tesauro.Remover(palavra))
                Console.WriteLine("\nPalavra removida com sucesso!");
            else
                Console.WriteLine("\nEssa palavra não consta no tesauro!");
            Console.ReadLine();
            Console.Clear();
        }

        static void tesauro_buscar()
        {
            string palavra;
            TermoTesauro t;
            Titulo();
            Console.Write("Digite a palavra que deseja consultar \n>> ");
            palavra = Console.ReadLine();
            t = (TermoTesauro)tesauro.Buscar(palavra);
            Console.Clear();
            if (t != null)
            {
                string[] significados = new string[3];
                significados[0] = t.Sinonimos;
                significados[1] = t.TermosConstrastantes;
                significados[2] = t.TermosRelacionados;
                Console.WriteLine(palavra + ":\n");
                Console.WriteLine("(1) Sinônimos: " + significados[0]);
                Console.WriteLine("(2) Termos contrastantes: " + significados[1]);
                Console.WriteLine("(3) Termos relacionados: " + significados[2]);
            }
            else
                Console.WriteLine("\nEssa palavra não consta no tesauro!");
            Console.ReadLine();
            Console.Clear();
        }

    }
}
